﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Fuyao.Business.Entities.Models;
using Fuyao.Business.Logic.BC;
using Fuyao.Win.UI.Util;
using Fuyao.Win.UI.Common;

namespace Fuyao.Win.UI.Mantenimientos
{
    public partial class frmConductor : Form
    {
        BusinessLogic bc = new BusinessLogic();

        #region Propiedades
        public bool action { get; set; }
        Conductor beConductor { get; set; }
        public int ConductorID { get; set; }
        #endregion       

        public frmConductor()
        {
            InitializeComponent();
        }

        private void frmConductor_Load(object sender, EventArgs e)
        {
            loadUI();
        }

        private void loadUI()
        {
            loadDefaultInformation();
            if (ConductorID == 0) newConductor();
            else editConductor();
        }

        private void loadDefaultInformation()
        {
            action = false;
            this.cboEstado.SelectedIndex = 0;
            if (ConductorID == 0)
            {
                this.cboEstado.Enabled = false;
                this.Text = "NUEVO CONDUCTOR";
            }
            else
            {
                this.cboEstado.Enabled = true;
                this.Text = "EDITAR CONDUCTOR";
            }
        }

        private void editConductor()
        {
            beConductor = bc.getConductorById(ConductorID);
            cargarDatosConductor(beConductor);
        }

        private void cargarDatosConductor(Conductor beConductor)
        {
            this.txtNombre.Text = beConductor.NombreConductor;
            this.txtApellido.Text = beConductor.ApellidoConductor;
            this.txtLicenciaConducir.Text = beConductor.LicenciaConducir;
            this.cboEstado.SelectedIndex = (beConductor.Estado == true ? 0 : 1);
        }

        private void newConductor()
        {
            beConductor = new Conductor();
            beConductor.CreadoPor = VariablesGlobales.GlobalEnUsuario.UsuarioID;
        }

        private Conductor llenarEntidadConductor()
        {
            beConductor.ConductorID = ConductorID;
            beConductor.NombreConductor = this.txtNombre.Text.Trim();
            beConductor.ApellidoConductor = this.txtApellido.Text.Trim();
            beConductor.LicenciaConducir = this.txtLicenciaConducir.Text.Trim();
            beConductor.Estado = this.cboEstado.SelectedIndex == 0 ? true : false;
            beConductor.CreadoPor = VariablesGlobales.GlobalEnUsuario.UsuarioID;
            return beConductor;
        }

        private void btnGrabar_Click(object sender, EventArgs e)
        {
            if (validarCamposRequeridos())
            {
                if (ConductorID == 0) //true:Insert
                {
                    if (bc.InsertConductor(llenarEntidadConductor()))
                    {
                        MessageBox.Show("Se ingresaron los datos correctamente", "Sistema FUYAO - Mensaje de Confirmación", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        cerrarForm();
                    }
                    else
                        MessageBox.Show("Error al ingresar los datos, contacte con Sistemas", "Sistema FUYAO - Mensaje de Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                }
                else //true:Editar
                {
                    if (bc.UpdateConductor(llenarEntidadConductor()))
                    {
                        MessageBox.Show("Se actualizaron los datos correctamente", "Sistema FUYAO - Mensaje de Confirmación", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        cerrarForm();
                    }
                    else
                        MessageBox.Show("Error al actuallizar los datos, contacte con Sistemas", "Sistema FUYAO - Mensaje de Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                }
            }
        }

        private bool validarCamposRequeridos()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("Ingrese los campos requeridos: " + System.Environment.NewLine);

            bool isValid = true;

            if (String.IsNullOrEmpty(txtNombre.Text))
            {
                sb.Append("- Nombre" + System.Environment.NewLine);
                ErrorProv.SetError(txtNombre, "Ingrese el nombre del conductor");
                isValid = false;
            }

            if (String.IsNullOrEmpty(txtApellido.Text))
            {
                sb.Append("- Apellido" + System.Environment.NewLine);
                ErrorProv.SetError(txtApellido, "Ingrese el apellido del conductor");
                isValid = false;
            }

            if (String.IsNullOrEmpty(txtLicenciaConducir.Text))
            {
                sb.Append("- Lincencia conducir" + System.Environment.NewLine);
                ErrorProv.SetError(txtLicenciaConducir, "Ingrese la licencia de conducir del conductor");
                isValid = false;
            }

            if (!isValid)
                MessageBox.Show(sb.ToString(), "Sistema FUYAO - Validando opción", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);

            return isValid;
        }        

        private void cerrarForm()
        {
            this.Close();
            action = true;
        }

        private void frmConductor_KeyPress(object sender, KeyPressEventArgs e)
        {
            Utilitarios.cerrarFormularioEscape(e, this);
        }

        private void btnCancelar_Click(object sender, EventArgs e)
        {
            if (ConductorID == 0)
            {
                foreach (Control c in groupBox1.Controls) if (c is TextBox) ((TextBox)c).Text = string.Empty;
                newConductor();
            }
            else resetDatosControles(); //else:Edit      
        }

        private void resetDatosControles()
        {
            cargarDatosConductor(beConductor);
        }

        private void txt_TextChanged(object sender, EventArgs e)
        {
            TextBox tbx = (TextBox)sender;
            ErrorProv.SetError(tbx, "");
        }
    }
}
